package com.bright.ghj.overt.manager;

import com.bright.ghj.overt.pojo.dto.HistoryTaskDTO;
import com.bright.ghj.overt.pojo.dto.ProcessDTO;
import com.bright.ghj.overt.pojo.dto.TaskStepDTO;

import java.util.List;
import java.util.Map;

public interface FlowManager {

    /**
     * 创建流程
     * @param moduleNo 模块号
     * @param proc_key 流程key值
     * @param businessKeyName 业务key值 可重复
     * @param variables 参数
     * @return
     */
    ProcessDTO startProcess(String moduleNo, String proc_key, String businessKeyName, Map<String, Object> variables);

    /**
     * 提交到下一步流程
     * @param taskId
     * @param variables
     */
    void commitToNextStepByTaskId(String taskId, Map<String, Object> variables);

    /**
     * 提交到下一步流程
     * @param instanceId
     * @param variables
     */
    void commitToNextStepByInstanceId(String instanceId, Map<String, Object> variables);

    /**
     * 获取当前流程步骤名称
     * @param taskId
     * @return
     */
    TaskStepDTO getCurrentStatusInfoByTaskId(String taskId);

    /**
     * 获取当前流程步骤名称
     * @param instanceId
     * @return
     */
    List<TaskStepDTO> listCurrentStatusInfoByInstanceId(String instanceId);

    /**
     * 回退到上一步骤
     * @param taskId
     * @param variables
     */
    void returnToLastStep(String taskId, Map<String, Object> variables);


    /**
     * 回退到指定步骤
     * @param instanceId
     * @param newStepName
     * @return
     */
    void moveToStepByStepNameByInstanceId(String instanceId, String newStepName);

    /**
     *
     * @param instanceId
     * @return
     */
    List<HistoryTaskDTO> listHistoryTasksByInstanceId(String instanceId);


    /**
     * 运行中流程实例迁移
     * @param fromProcessDefId 迁移原流程定义id
     * @param toProcessDefId 迁移目标流程定义id
     */
    void procInstMigration(String fromProcessDefId, String toProcessDefId);
}
